The compiler assumes that any pair of memory references may be aliased unless it can prove otherwise (the default).
The compiler assumes that any pair of memory references which reference distinct types in fact reference distinct data.
For example, consider the code:
void dbl ( int *i, float *f )
{
*i = *i + *i;
*f = *f + *f;
}
The compiler assumes that i and f point to different memory, and produces an overlapped schedule for the two calculations.
The compiler assumes that pointers never point to named objects. For example, consider the code:
floatg;
void dbl ( float *f )
{
*g = g + g;
*f = *f + *f;
}
The compiler assumes that f cannot point to g, and produces an overlapped schedule for the two calculations. This option also implies the alias=typed assumption. Note that this is the default assumption for the pointers implicit in Fortran dummy arguments according to the ANSI standard.
The compiler assumes a very restrictive model of aliasing, where no two pointers ever point to the same memory area. For example, consider the code:
void dbl ( int *i, int *j )
{
*i = *i + *i;
*j = *j + *j;
}
The compiler assumes that i and j point to different memory, and produces an overlapped schedule for the two calculations.
Although this is a very dangerous option to use in general, it may produce significantly better code when used for specific well-controlled cases where it is known to be valid.